import Vue from 'vue'

// 创建全局事件总线
export const userInfoBus = new Vue()

//获取浏览器存储
const getInitialSettings = () => {
  try {
    return JSON.parse(localStorage.getItem('userSettings')) || {}
  } catch (e) {
    console.error('解析userSettings失败:', e)
    return {}
  }
}
const userSettings = getInitialSettings()


// 全局用户信息对象（响应式）
export const globalUserInfo = Vue.observable({
	nowSubAccount: null, //账号地址,例子:0x46d2****e16818e，
	nowNetwork: userSettings.network || null, //网络标识，例子：ERC20-USDC。
	chainType: userSettings.chainType || null, //币种类型两个bsc\erc
	cointype: userSettings.cointype || 'USDT', //链类型，两种类型USDC/USDT
	extraUrl: '', //额外请求地址https://api.houtai.bond/api
	lang:'',//当前语言标识，跟后端一致
	is_auth:'0',//授权状态0：未授权，1：授权
})

// 全体更新方法（触发事件）
export const updateUserInfo = (newInfo) => {
	Object.assign(globalUserInfo, newInfo)
	userInfoBus.$emit('user-info-updated', globalUserInfo)
}
// 单个nowSubAccount属性更新方法
export const updateSubAccount = (value) => {
	globalUserInfo.nowSubAccount = value;
	userInfoBus.$emit('user-info-updated', globalUserInfo);
};
// 单个nowNetwork属性更新方法
export const updateNetwork = (value) => {
	globalUserInfo.nowNetwork = value;
	userInfoBus.$emit('user-info-updated', globalUserInfo);
};
// 单个chainType属性更新方法
export const updateChainType = (value) => {
	globalUserInfo.chainType = value;
	userInfoBus.$emit('user-info-updated', globalUserInfo);
};
// 单个cointype属性更新方法
export const updateCointype = (value) => {
	globalUserInfo.cointype = value;
	userInfoBus.$emit('user-info-updated', globalUserInfo);
};
// 单个lang属性更新方法
export const updateLang = (value) => {
	globalUserInfo.lang = value;
	userInfoBus.$emit('user-info-updated', globalUserInfo);
};
// 单个is_auth属性更新方法
export const updateIs_auth = (value) => {
	globalUserInfo.is_auth = value;
	userInfoBus.$emit('user-info-updated', globalUserInfo);
};
export default {
	globalUserInfo,
	install(Vue) {
		Vue.prototype.$userInfo = globalUserInfo;
		Vue.prototype.$updateUserInfo = updateUserInfo;
		Vue.prototype.$userInfoBus = userInfoBus;
		Vue.prototype.$updateSubAccount = updateSubAccount;
		Vue.prototype.$updateNetwork = updateNetwork;
		Vue.prototype.$updateChainType = updateChainType;
		Vue.prototype.$updateCointype = updateCointype;
		Vue.prototype.$updateLang = updateLang;
		Vue.prototype.$updateIs_auth = updateIs_auth;
	}
}